package com.agy.filemanager.toolClass;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;

/**
 * @author jpf
 * @des 文件操作，如上传、下载等
 */
@Controller
@RequestMapping("/fileUtil")
public class FileUtil {
    /**
     * 单个文件上传（上传到项目路径或指定磁盘位置）
     * @param request  上传文件目录
     * @param file     上传对象
     * @return
     */
    @PostMapping(value="/upload")
    public @ResponseBody
    Result upload(HttpServletRequest request, @RequestParam("file") MultipartFile file){
        try{
            if (file.isEmpty())
            {
                return ResultUtil.error("文件为空");
            }
            //上传目录地址(指定磁盘路径)String uploaDir = "F:\\ss/";
            //上传目录地址(项目目录)
            String uploadDir = request.getSession().getServletContext().getRealPath("/")+"res/";
            //如果目录不存在自动创建文件
            File dir = new File(uploadDir);
            if(!dir.exists()){
                dir.mkdir();
            }
            executeUpload(uploadDir,file);
        }catch(Exception ex){
            ex.printStackTrace();
            return ResultUtil.error("上传失败");
        }
        return ResultUtil.success(null,"上传成功");
    }

    /**
     * 提取上传方法为公共方法
     * @param uploadDir  上传文件目录
     * @param file       上传对象
     * @throws Exception
     */
    private void executeUpload(String uploadDir, MultipartFile file)throws Exception{
        //文件后缀名
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        //上传文件名(使用随机UUID.randomUUID()或者时间戳System.nanoTime())
        String fileName = System.nanoTime()+suffix;
        //服务器端保存的文件对象
        File serverFile = new File(uploadDir+fileName);
        //将上传的文件写入到服务端文件内
        file.transferTo(serverFile);
    }
    /**
     * 多文件上传（上传到项目路径或指定磁盘位置）
     * @param request 请求对象
     * @param file  上传文件集合
     * @return
     */
    @PostMapping(value="/uploads")
    public @ResponseBody Result uploads(HttpServletRequest request, MultipartFile[] file){
        try{
            //String uploadDir = request.getServletContext().getRealPath("/")+"res/";
            String uploadDir = "F:\\ss/";
            //如果目录不存在自动创建文件
            File dir = new File(uploadDir);
            if(!dir.exists()){
                dir.mkdir();
            }
            //遍历文件数组执行上传
            for(int i = 0;i<file.length;i++){
                if(!"".equals(file[i].getOriginalFilename())){
                     //调用上传方法
                     executeUpload(uploadDir,file[i]);
                 }
            }
        }catch(Exception ex){
            ex.printStackTrace();
            return ResultUtil.error("上传失败");
        }
        return ResultUtil.success(null,"上传成功","200");
    }
}
